#ifndef CAMERA_HEADER
#define CAMERA_HEADER

#include <gl/glew.h>
#include <vector.h>
#include <cmath>
#include "input.h"
#include "util.h"

#define PERSPECTIVE		0x0000
#define ORTHOGRAPHIC	0x0001
#define TWODEE			0x1000

using namespace std;

class Camera
{
private:
	float x, y, z;
	float pitch, yaw, roll;
	float fov;
	float aspectRatio;
	float zNear;
	float zFar;

	void Move(float, float);
public:
	Camera(float, float, float, float, float, float, float, float, float, float);
	~Camera();

	void ProcessInput(Input*, float, float, Vector3f, const Vector2f); // Last parameter: .x = maxLookDown & .y = maxLookUp
	void SetupProjectionMatrix(int, Vector2i);

	void FlyUp(float);
	void FlyDown(float);

	float GetX();
	float GetY();
	float GetZ();
	void SetPosition(Vector3f);

	float GetPitch();
	float GetYaw();
	float GetRoll();
	void SetRotation(Vector3f);

	float GetFOV();
	void SetFOV(float);

	float GetAspectRatio();
	void SetAspectRatio(float);
};

#endif